package com.ruleengine.frame;

import com.ruleengine.context.IWorkflowConext;
import com.ruleengine.endpoint.data.IEndpointData;
import com.ruleengine.frame.callback.IRuleEngineCallback;
import com.ruleengine.frame.exception.RuleEngineFrameException;

public interface IRuleEngineFrame {
    
    /**同步调用工作流统一入口，调用结果
     * 通过IWorkflowData返回，或从context里
     * 获取
     * @param context 调用上下文
     * @param data 工作流同一数据对象
     * @return 工作流调用结果
     * @throws RuleEngineFrameException
     */
    public void executeCallBack(IWorkflowConext context, IEndpointData data)throws RuleEngineFrameException;

    /**同步调用工作流统一入口，调用结果
     * 通过IWorkflowData返回，或从context里
     * 获取
     * @param context 调用上下文
     * @param data 工作流同一数据对象
     * @return 工作流调用结果
     * @throws RuleEngineFrameException
     */
    public Object execute(IWorkflowConext context, IEndpointData data)throws RuleEngineFrameException;
    
    
    /**异步调用工作流统一入口，调用结果
     * 通过IWorkflowData返回，或从context里
     * 获取
     * @param context 调用上下文
     * @param data 工作流同一数据对象
     * @throws RuleEngineFrameException
     */
    public void executeNonBlocking(IWorkflowConext context, IEndpointData data, IRuleEngineCallback callback)throws RuleEngineFrameException;
}
